package com.ruoyi.info.service.impl;

import com.ruoyi.info.domain.FhInfoTasklist;
import com.ruoyi.info.domain.FhInfoUsertask;
import com.ruoyi.info.mapper.FhInfoUsertaskMapper;
import com.ruoyi.info.service.IFhInfoTasklistService;
import com.ruoyi.info.service.IFhInfoUsertaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * 用户完成任务控制Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-11-25
 */
@Service
public class FhInfoUsertaskServiceImpl implements IFhInfoUsertaskService 
{
    @Autowired
    private FhInfoUsertaskMapper fhInfoUsertaskMapper;

    @Autowired
    private IFhInfoTasklistService fhInfoTasklistService;

    /**
     * 查询用户完成任务控制
     * 
     * @param id 用户完成任务控制主键
     * @return 用户完成任务控制
     */
    @Override
    public FhInfoUsertask selectFhInfoUsertaskById(Long id)
    {
        return fhInfoUsertaskMapper.selectFhInfoUsertaskById(id);
    }

    /**
     * 查询用户完成任务控制列表
     * 
     * @param fhInfoUsertask 用户完成任务控制
     * @return 用户完成任务控制
     */
    @Override
    public List<FhInfoUsertask> selectFhInfoUsertaskList(FhInfoUsertask fhInfoUsertask)
    {
        return fhInfoUsertaskMapper.selectFhInfoUsertaskList(fhInfoUsertask);
    }

    /**
     * 新增用户完成任务控制
     * 
     * @param fhInfoUsertask 用户完成任务控制
     * @return 结果
     */
    @Override
    public int insertFhInfoUsertask(FhInfoUsertask fhInfoUsertask)
    {
        return fhInfoUsertaskMapper.insertFhInfoUsertask(fhInfoUsertask);
    }

    /**
     * 修改用户完成任务控制
     * 
     * @param fhInfoUsertask 用户完成任务控制
     * @return 结果
     */
    @Override
    public int updateFhInfoUsertask(FhInfoUsertask fhInfoUsertask)
    {
        fhInfoUsertask.setUpdateTime(LocalDateTime.now());
        return fhInfoUsertaskMapper.updateFhInfoUsertask(fhInfoUsertask);
    }

    /**
     * 批量删除用户完成任务控制
     * 
     * @param ids 需要删除的用户完成任务控制主键
     * @return 结果
     */
    @Override
    public int deleteFhInfoUsertaskByIds(Long[] ids)
    {
        return fhInfoUsertaskMapper.deleteFhInfoUsertaskByIds(ids);
    }

    /**
     * 删除用户完成任务控制信息
     * 
     * @param id 用户完成任务控制主键
     * @return 结果
     */
    @Override
    public int deleteFhInfoUsertaskById(Long id)
    {
        return fhInfoUsertaskMapper.deleteFhInfoUsertaskById(id);
    }

    @Override
    public void updateFhInfoUsertaskByUserIdAndTaskId(FhInfoUsertask fhInfoUsertask) {
        fhInfoUsertaskMapper.updateFhInfoUsertaskByUserIdAndTaskId(fhInfoUsertask);
    }

    @Override
    public int countTodayTaskLog(Long userId, Long taskId, String taskDate) {
        return fhInfoUsertaskMapper.countTodayTaskLog(userId, taskId, taskDate);
    }

    @Override
    public int insertTaskLog(Long userId, Long taskId) {
        // 获取任务信息
        FhInfoTasklist tasklist = fhInfoTasklistService.selectFhInfoTasklistById(taskId);
        if (tasklist == null) {
            return 0;
        }
        
        // 创建任务日志记录
        FhInfoUsertask taskLog = new FhInfoUsertask();
        taskLog.setUserId(userId);
        taskLog.setTaskId(taskId);
        taskLog.setTask(tasklist.getTask());
        taskLog.setDetails(tasklist.getDetails());
        taskLog.setPoint(tasklist.getPoint());
        taskLog.setTaskType(tasklist.getTaskType());
        taskLog.setTaskTime(new Date());
        taskLog.setCompletionStatus("1"); // 1表示未完成（日志记录）
        taskLog.setRewardReceived("0"); // 0表示未领取积分
        taskLog.setCrateTime(new Date());
        
        return fhInfoUsertaskMapper.insertFhInfoUsertask(taskLog);
    }

    @Override
    public boolean isRewardReceived(Long userId, Long taskId, String taskDate) {
        return fhInfoUsertaskMapper.isRewardReceived(userId, taskId, taskDate);
    }
}
